package com.ruoyi.tenant;

import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.ServletUtils;
import lombok.AllArgsConstructor;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
import org.springframework.web.context.request.ServletRequestAttributes;

import java.util.Arrays;
import java.util.List;


@AllArgsConstructor
public class CommonTenantHandler implements TenantLineHandler {

    /**
     * 获取租户ID
     *
     * @return 租户ID
     */
    @Override
    public Expression getTenantId() {
        try {
            return new LongValue(LoginHelper.getTenantId());
        } catch (Exception e) {
            return new LongValue();
        }
    }

    /**
     * 获取租户字段名称
     *
     * @return 租户字段名称
     */
    @Override
    public String getTenantIdColumn() {
        return TenantProperties.getInstance().getColumn();
    }

    /**
     * 过滤租户表
     *
     * @param tableName 表名
     * @return 是否进行过滤 返回true 表示不进行多租户处理
     */
    @Override
    public boolean ignoreTable(String tableName) {

        /*if (!TenantProperties.getInstance().getEnable()) {
            return true;
        }
        return !TenantProperties.getInstance().getIgnoreTables().contains(tableName);*/

        ServletRequestAttributes requestAttributes = ServletUtils.getRequestAttributes();
        if (ObjectUtil.isNotNull(requestAttributes)) {
            String requestURI = requestAttributes.getRequest().getRequestURI();
            // 判断是否登录，如果登录则过滤
            if (!requestURI.contains("/login")) {
                // 判断是否平台超级管理员，如果是平台超级管理员则拥有所有数据权限
                if (!LoginHelper.isAdmin()) {
                    // 需要过滤租户的表
                    List<String> tableNameList = Arrays.asList("sys_user", "sys_role", "sys_dept", "sys_post");
                    return !tableNameList.contains(tableName);
                }
            }
        }
        return true;
    }
}
